home *** CD-ROM | disk | FTP | other *** search
/ Nikkei Mac 20 / NIKKEI-MAC-CD-VOL-20-1998-12.ISO.7z / NIKKEI-MAC-CD-VOL-20-1998-12.ISO / オンラインソフト / 9.ウェブ作成ツール / ImageMapper 2.5J (FAT) .sit / ImageMapper (FAT) 2.5J / チュートリアル / java / HighlightedImageMap.java < prev    next >
Text File  |  1996-10-10  |  6KB  |  246 lines

  1. import java.applet.*;
  2. import java.awt.*;
  3. import java.awt.image.*;
  4. import java.io.*;
  5. import java.net.*;
  6.  
  7. public class HighlightedImageMap extends Applet
  8. {
  9.  
  10. Image                 normalimg;
  11. Image                 highlightedimg=null;
  12.  
  13. public boolean        nloaded=false;
  14. public boolean        hloaded=false;
  15.  
  16. boolean             debug=false;
  17.  
  18. public void start()
  19. {
  20.     //Check if the images are already loaded. (Cache fix)
  21.     if ((checkImage(normalimg,this) & ImageObserver.ALLBITS)==ImageObserver.ALLBITS)
  22.     {
  23.         nloaded=true;
  24.     }
  25.     
  26.     if ((checkImage(highlightedimg,this) & ImageObserver.ALLBITS)==ImageObserver.ALLBITS)
  27.     {
  28.         hloaded=true;
  29.     }
  30.  
  31.     //Paint it!
  32.     repaint();
  33. }
  34.     
  35. public void init()
  36. {
  37.     //Applet name
  38.     System.out.println("HighlightedImageMap v1.11¥nRickard ヨberg(rickard@lysator.liu.se) 1996");
  39.     
  40.     //Show "Loading"
  41.     repaint();
  42.  
  43.     //Show debug(X/Y) info?
  44.     debug=(getParameter("debug")==null)?false:true;
  45.      
  46.     //Target frame name. If null then same frame is target
  47.     //Either one target for every link, or one for each link
  48.  
  49.     String target=getParameter("target");
  50.     if (target==null)
  51.         target="";
  52.  
  53.     boolean individualtargets=false; //If true, each link has it's own target frame/window
  54.     StringBufferInputStream tsbis=new StringBufferInputStream(target);
  55.     StreamTokenizer         tst=new StreamTokenizer(tsbis);
  56.     
  57.     if (target.indexOf(',')!=-1)
  58.         individualtargets=true; //Individual link targets
  59.  
  60.     //Get images
  61.     URL hosturl=getDocumentBase();
  62.     URL normalurl;
  63.     URL highlightedurl;
  64.  
  65.     try
  66.     {
  67.         normalurl=new URL(hosturl,getParameter("normal"));
  68.         highlightedurl=new URL(hosturl,getParameter("highlight"));
  69.     }
  70.     catch(Exception e)
  71.     {
  72.         System.out.println("Error: 'normal' or 'highlight' not valid");
  73.         return;
  74.     }
  75.  
  76.        normalimg=getImage(normalurl);
  77.     highlightedimg=getImage(highlightedurl);
  78.     prepareImage(normalimg,this);
  79.     prepareImage(highlightedimg,this);
  80.  
  81.     //Get rid of the layout manager: WE DON'T WANT IT!
  82.     setLayout(null);
  83.  
  84.     /*
  85.      *
  86.      * Parse links
  87.      *
  88.      */
  89.  
  90.     String links=getParameter("links");
  91.  
  92.     //No links, no imagemap
  93.     if (links==null)
  94.     {
  95.         System.out.println("Error: no links specified");
  96.         return;
  97.     }
  98.  
  99.     StringBufferInputStream sbis=new StringBufferInputStream(links);
  100.     StreamTokenizer         st=new StreamTokenizer(sbis);
  101.     st.quoteChar(39);
  102.     
  103.     //Syntax {ulx,uly,lrx,lry,"URL"}
  104.     int x,y,w,h;
  105.     URL url; //Link URL
  106.     String alt;
  107.     boolean done=false; //Done parsing links?
  108.  
  109.     try
  110.         do
  111.         {
  112.             //Default alternative text
  113.             alt="";
  114.  
  115.             if (st.nextToken()!='{') throw new Exception("{ expected");
  116.     
  117.             //Upper left x
  118.             if (st.nextToken()!=StreamTokenizer.TT_NUMBER) throw new Exception("number expected");
  119.             x=(int)st.nval;
  120.     
  121.            // ','
  122.            if (st.nextToken()!=',') throw new Exception("',' expected");
  123.     
  124.            //Upper left y
  125.            if (st.nextToken()!=StreamTokenizer.TT_NUMBER) throw new Exception("number expected");
  126.            y=(int)st.nval;
  127.  
  128.            // ','
  129.            if (st.nextToken()!=',') throw new Exception("',' expected");
  130.  
  131.            //Lower right x
  132.            if (st.nextToken()!=StreamTokenizer.TT_NUMBER) throw new Exception("number expected");
  133.            w=(int)st.nval-x;
  134.  
  135.            // ','
  136.            if (st.nextToken()!=',') throw new Exception("',' expected");
  137.     
  138.            //Lower right y
  139.            if (st.nextToken()!=StreamTokenizer.TT_NUMBER) throw new Exception("number expected");
  140.            h=(int)st.nval-y;
  141.     
  142.            // ','
  143.            if (st.nextToken()!=',') throw new Exception("',' expected");
  144.     
  145.            //URL
  146.            if (st.nextToken()!=39) throw new Exception("quoted url expected(use ' for quotation)");
  147.            url=new URL(getDocumentBase(),st.sval);
  148.  
  149.            //Optional alternative text
  150.            if (st.nextToken()==',')
  151.            {
  152.                if (st.nextToken()==39)
  153.                    alt=st.sval;
  154.                else
  155.                    throw new Exception("alternative linktext expected");
  156.            }
  157.            else
  158.                st.pushBack();
  159.  
  160.            if (st.nextToken()!='}') throw new Exception("} expected");
  161.  
  162.            //Get target name
  163.            String linktarget; //Target for this particular link
  164.            if (individualtargets)
  165.            {
  166.                tst.nextToken();
  167.                linktarget=tst.sval;
  168.                tst.nextToken();
  169.            }
  170.            else
  171.                linktarget=target; //Use global target
  172.     
  173.            //Create images for link
  174.            ImageFilter cropfilter = new CropImageFilter(x,y,w,h);
  175.            Image nimg = createImage(new FilteredImageSource(normalimg.getSource(),
  176.                                     cropfilter));
  177.  
  178.            Image hlimg = createImage(new FilteredImageSource(highlightedimg.getSource(),
  179.                                      cropfilter));
  180.  
  181.            //Add link
  182.            add(new HighlightableLink(x,y,w,h,nimg,hlimg,url,alt,linktarget,this));
  183.  
  184.            //Check if end of links
  185.            if (st.nextToken()==StreamTokenizer.TT_EOF)
  186.                done=true;
  187.  
  188.            st.pushBack();
  189.  
  190.         } while(!done);
  191.     catch(Exception e)
  192.     {
  193.         System.out.println("Error in links parameter:");
  194.         System.out.println(e);
  195.     }
  196. }
  197.  
  198. public void paint(Graphics g)
  199. {
  200.     if (nloaded && hloaded)
  201.     {
  202.         g.drawImage(normalimg,0,0,this);
  203.     }
  204.     else
  205.         g.drawString("Loading",0,10);
  206.  
  207.     paintComponents(g);
  208. }
  209.  
  210. public void update(Graphics g)
  211. {
  212.     paint(g);
  213. }
  214.  
  215. public boolean imageUpdate(Image  img, int  infoflags,
  216.             int  x, int  y, int  width, int  height)
  217. {
  218.     if (img==normalimg && (infoflags & ImageObserver.ALLBITS)==ImageObserver.ALLBITS)
  219.     {
  220.         nloaded=true;
  221.     }
  222.     
  223.     if (img==highlightedimg && (infoflags & ImageObserver.ALLBITS)==ImageObserver.ALLBITS)
  224.     {
  225.         hloaded=true;
  226.     }
  227.  
  228.     if (nloaded && hloaded)
  229.         repaint();
  230.  
  231.     return !(hloaded && nloaded);
  232. }
  233.     
  234. public boolean mouseMove(Event evt, int x, int y)
  235. {
  236.     //Show debug(X/Y) info
  237.     if (debug)
  238.     {    
  239.         showStatus("X: "+x+" Y: "+y);
  240.         return true;
  241.     }
  242.  
  243.     return false;
  244. }
  245.  
  246. }